\chapter{光线追踪}

计算机图形学的基础任务之一就是渲染三维物体：取一个由许多几何物体在三维空间中排列组成的场景，并计算出一个从一个特定视角看这些物体的二维图像。几个世纪以来，建筑师和工程师都是这样做的，他们绘制图纸，向他人传达他们的设计。

从根本上说，渲染是一个将一系列物体作为输入，并产生一个像素阵列的过程。无论如何，渲染涉及到考虑每个物体对每个像素的贡献，它可以以两种常见的方式规划。在物序渲染（object-order rendering）中，每个物体依次被处理，并且对于每个物体，其影响的每个像素都会被找到并被更新。在图序渲染中（image-order rendering），每个像素依次被处理，并且对于每个像素，所有影响它的物体都会被找到再计算像素值。你可以从循环嵌套的角来考虑区别：在图序渲染中，循环“对于每个像素”在嵌套的外面，而在物序渲染中，循环“对于每个物体”在嵌套的外面。

\marginpar{
  \begin{center}
    \begin{note}\\
      如果输出是矢量图像而不是光栅图像，渲染就不会涉及到像素，但我们在本书中将会假定输出光栅图像。
    \end{note}
  \end{center}
}

图序渲染和物序渲染可以计算出完全一样的图像，但它们计算出的特效不同，性能特点也大相径庭。在我们讨论完这两种方法后，我们将在第9章探讨这两种方法的比较优势，但一般来说，图像顺序渲染的工作方式更简单，可以产生的特效也更灵活，但通常（尽管不一定）需要更多的执行时间来产生一个类似的图像。

\marginpar{
  \begin{center}
    \begin{note}\\
      在光线追踪器中，很容易计算出准确的阴影和反射，而这在物序渲染框架中是很棘手的。
    \end{note}
  \end{center}
}

光线追踪是一种渲染3D场景的图序渲染算法，我们会先讨论它，因为无需开发用于物序渲染的数学机器就有可能得到一个工作的光线追踪器。

\section{基础光线追踪算法}



\section{透视图}

\section{计算视线}

\section{光线相交}

\section{阴影}

\section{历史笔记}
